#pragma once
#include <iostream>
#include <semaphore.h>
#include <pthread.h>

namespace SemModule {
    // 信号量的默认初始值
    const int defaultvalue = 1;
    class Sem {
    public:
        Sem(unsigned int sem_value = defaultvalue) {
            sem_init(&_sem, 0, sem_value);
        }

        // P 操作
        void P() {
            int n = sem_wait(&_sem);
            (void)n;
        }

        // V 操作
        void V() {
            int n = sem_post(&_sem);
            (void)n;
        }

        ~Sem() {
            sem_destroy(&_sem);
        }
    private:
        sem_t _sem;
    };
}